﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SksApp
{
    public class Security
    {
        private Security() { }
        private static Security _instance = null;
        public static Security Get
        {
            get
            {
                if (_instance == null)
                    _instance = new Security();
                return _instance;
            }
        }

        public enum Durum
        {
            Onayli, Onaysiz, SifreOnayli
        }
        public enum SaticiDurum
        {
            Girilebilir, Girilemez, GirisiZorunlu
        }

        public Kasiyer AktifKasiyer { get; set; }
        public Kasa AktifKasa { get; set; }
        public Magaza AktifMagaza { get; set; }

        public void Init(int kasiyerID)
        {
            int kasano = -1;
            int magazano = -1;
            using (SksEntity ent = new SksEntity())
            {
                AktifKasiyer = ent.Kasiyerler.Where(x => x.ID == kasiyerID).FirstOrDefault();

                if (!string.IsNullOrEmpty(Settings.Instance.GetValue(Information.MagazaNo)))
                {
                    magazano = Cevir.Parse<int>(Settings.Instance.GetValue(Information.MagazaNo));
                    AktifMagaza = ent.Magazalar.Where(x => x.No == magazano).FirstOrDefault();
                }

                if (!string.IsNullOrEmpty(Settings.Instance.GetValue(Information.KasaNo)) && AktifMagaza != null)
                {
                    kasano = int.Parse(Settings.Instance.GetValue(Information.KasaNo));
                    AktifKasa = (from k in ent.Kasalar where k.No == kasano && k.MagazaID == AktifMagaza.ID select k).FirstOrDefault();
                }
            }
        }
        //public bool AdminSifreKontrol()
        //{
        //    frmInputDialog dlg = new frmInputDialog(frmInputDialog.ListeTipleri.AdminSifre);
        //    if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.Yes)
        //    {
        //        return true;
        //    }
        //    else
        //    {
        //        return false;
        //    }
        //}
        //public bool CekmeLimitKontrol(decimal tutar)
        //{
        //    if (AktifKasa.CekmeLimiti > 0)
        //    {
        //        DateTime baslangic = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
        //        DateTime bitis = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
        //        decimal cekmeToplami = 0;
        //        using (SksEntity ent = new SksEntity())
        //        {
        //            cekmeToplami = ent.KasaHareketleri.Where(x => x.KasiyerId == AktifKasiyer.ID && x.Tarih >= baslangic && x.Tarih <= bitis && x.Tip == false).Select(x => (decimal?)x.Tutar).Sum() ?? 00;
        //            cekmeToplami += tutar;
        //        }
        //        if (AktifKasa.CekmeLimiti >= cekmeToplami && AktifKasiyer.CekmeLimit >= cekmeToplami)
        //            return true;
        //        else
        //            return false;
        //    }
        //    else
        //    {
        //        return true;
        //    }
        //}
        //public bool AvansLimitKontrol(decimal tutar)
        //{
        //    if (AktifKasa.AvansLimiti > 0)
        //    {
        //        DateTime baslangic = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
        //        DateTime bitis = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
        //        decimal avansToplami = 0;
        //        using (SksEntity ent = new SksEntity())
        //        {
        //            avansToplami = ent.KasaHareketleri.Where(x => x.KasiyerId == AktifKasiyer.ID && x.Tarih >= baslangic && x.Tarih <= bitis && x.Tip == true).Select(x => (decimal?)x.Tutar).Sum() ?? 00;
        //            avansToplami += tutar;
        //        }
        //        if (AktifKasa.AvansLimiti >= avansToplami && AktifKasiyer.AvansLimit >= avansToplami)
        //            return true;
        //        else
        //            return false;
        //    }
        //    else
        //    {
        //        return true;
        //    }
        //}
        //public bool FisYuzdeIndirimLimitKontrol(decimal yuzde)
        //{
        //    if (AktifKasa.ToplamIndirimLimit == 0)
        //        return true;
        //    else if (AktifKasa.ToplamIndirimLimit >= yuzde)
        //        return true;
        //    else
        //        return false;
        //}
        //public bool ToplamIadeLimitKontrol(decimal tutar)
        //{
        //    bool sonuc = true;
        //    decimal? limit = AktifKasa.ToplamIadeSiniri;
        //    if (limit.HasValue && limit > 0)
        //    {
        //        DateTime baslangic = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
        //        DateTime bitis = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
        //        using (SksEntity ent = new SksEntity())
        //        {
        //            decimal? iadeTutari = ent.UstBilgiler.Where(x => x.Tarih >= baslangic && x.Tarih <= bitis && x.KasaId == AktifKasa.ID && x.KasiyerId == AktifKasiyer.ID && x.BelgeTip == 3).Select(x => (decimal?)x.Yekun).Sum() ?? 0;
        //            if (iadeTutari.HasValue)
        //            {
        //                if (limit + tutar > iadeTutari.Value)
        //                    sonuc = false;
        //            }
        //        }
        //    }
        //    return sonuc;
        //}
        //public bool FisIptalLimitKontrol(decimal tutar)
        //{
        //    bool sonuc = true;
        //    decimal limit = AktifKasiyer.FisIptalLimiti;
        //    if (limit > 0)
        //    {
        //        DateTime baslangic = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
        //        DateTime bitis = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
        //        using (SksEntity ent = new SksEntity())
        //        {
        //            decimal iptalTutari = ent.IptalFisler.Where(x => x.KasiyerID == AktifKasiyer.ID && x.Tarih >= baslangic && x.Tarih <= bitis).Select(x => (decimal?)x.Tutar).Sum() ?? 00;
        //            if (iptalTutari + tutar > limit)
        //                sonuc = false;
        //        }
        //    }
        //    return sonuc;
        //}

        public string DecimalFormat()
        {
            if (!string.IsNullOrEmpty(Settings.Instance.GetValue(Information.KurusHanesi)))
            {
                return "n" + Settings.Instance.GetValue(Information.KurusHanesi);
            }
            else
            {
                return "n2";
            }
        }

        //public bool SifreZorunlumu()
        //{
        //    bool sonuc = true;
        //    int kasano = -1;
        //    string magazano = string.Empty;
        //    using (SksEntity ent = new SksEntity())
        //    {
        //        if (!string.IsNullOrEmpty(Settings.Instance.GetValue(Information.StoreNo)))
        //        {
        //            magazano = Settings.Instance.GetValue(Information.StoreNo);
        //        }
        //        if (!string.IsNullOrEmpty(Settings.Instance.GetValue(Information.CashNo)) && !string.IsNullOrEmpty(magazano))
        //        {
        //            kasano = int.Parse(Settings.Instance.GetValue(Information.CashNo));
        //            bool? sifre = (from k in ent.Kasalar join m in ent.Magazalar on k.MagazaId equals m.ID where k.No == kasano && m.Kodu == magazano select k.SifreZorunlu).FirstOrDefault();
        //            if (sifre.HasValue)
        //                sonuc = sifre.Value;
        //        }
        //    }
        //    return sonuc;
        //}
        ///// <summary>
        ///// Karşılığı henüz yok
        ///// </summary>
        //public Durum UruneYuzdeIndirim
        //{
        //    get
        //    {
        //        if (AktifKasa.UruneYuzdeIndirim)
        //        {
        //            switch (AktifKasiyer.UruneYuzdeIndirim)
        //            {
        //                case 0:
        //                    return Durum.Onayli;
        //                case 1:
        //                    return Durum.Onaysiz;
        //                case 2:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //            return Durum.Onaysiz;
        //    }
        //}

        ///// <summary>
        ///// Karşılığı henüz yok
        ///// </summary>
        //public Durum UruneTutarIndirim
        //{
        //    get
        //    {
        //        if (AktifKasa.UruneTutarIndirim)
        //        {
        //            switch (AktifKasiyer.UruneTutarIndirim)
        //            {
        //                case 0:
        //                    return Durum.Onayli;
        //                case 1:
        //                    return Durum.Onaysiz;
        //                case 2:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //            return Durum.Onaysiz;
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum FiseYuzdeIndirim
        //{
        //    get
        //    {
        //        if (AktifKasa.FiseYuzdeIndirim)
        //        {
        //            switch (AktifKasiyer.ToplamaYuzdeIndirim)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //            return Durum.Onaysiz;
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum FiseTutarIndirim
        //{
        //    get
        //    {
        //        if (AktifKasa.FiseTutarIndirim)
        //        {
        //            switch (AktifKasiyer.ToplamaTutarIndirim)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //            return Durum.Onaysiz;
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum AvansIslemi
        //{
        //    get
        //    {
        //        if (AktifKasa.AvansYapabilir)
        //        {
        //            switch (AktifKasiyer.Avans)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //        {
        //            return Durum.Onaysiz;
        //        }
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum CekmeIslemi
        //{
        //    get
        //    {
        //        if (AktifKasa.CekmeYapabilir)
        //        {
        //            switch (AktifKasiyer.Cekme)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //        {
        //            return Durum.Onaysiz;
        //        }
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum IadeIslemi
        //{
        //    get
        //    {
        //        if (AktifKasa.IadeKesebilir)
        //        {
        //            switch (AktifKasiyer.Iade)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //        {
        //            return Durum.Onaysiz;
        //        }
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum SatisIslemi
        //{
        //    get
        //    {
        //        if (AktifKasa.SatisYapabilir)
        //        {
        //            switch (AktifKasiyer.Fis)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //        {
        //            return Durum.Onaysiz;
        //        }
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum FaturaIslemi
        //{
        //    get
        //    {
        //        if (AktifKasa.FaturaliSatisYapabilir)
        //        {
        //            switch (AktifKasiyer.Fatura)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //        {
        //            return Durum.Onaysiz;
        //        }
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum RaporAlmaIslemi
        //{
        //    get
        //    {
        //        if (AktifKasa.RaporAlabilir)
        //        {
        //            switch (AktifKasiyer.RaporAlma)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //        {
        //            return Durum.Onaysiz;
        //        }

        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum FiyatGorIslemi
        //{
        //    get
        //    {
        //        switch (AktifKasiyer.FiyatGor)
        //        {
        //            case 1:
        //                return Durum.Onayli;
        //            case 2:
        //                return Durum.Onaysiz;
        //            case 3:
        //                return Durum.SifreOnayli;
        //            default:
        //                return Durum.Onayli;
        //        }
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum UrunIptalIslemi
        //{
        //    get
        //    {
        //        switch (AktifKasiyer.UrunIptal)
        //        {
        //            case 1:
        //                return Durum.Onayli;
        //            case 2:
        //                return Durum.Onaysiz;
        //            case 3:
        //                return Durum.SifreOnayli;
        //            default:
        //                return Durum.Onayli;
        //        }
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum FisIptalIslemi
        //{
        //    get
        //    {
        //        if (AktifKasa.FisIptaliYapabilir)
        //        {
        //            switch (AktifKasiyer.FisFaturaIptal)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //        {
        //            return Durum.Onaysiz;
        //        }
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum BelgeTekrarIslemi
        //{
        //    get
        //    {
        //        if (AktifKasa.BelgeTekrarEdebilir)
        //        {
        //            switch (AktifKasiyer.BelgeTekrar)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //        {
        //            return Durum.Onaysiz;
        //        }
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum AskiyaAlmaIslemi
        //{
        //    get
        //    {
        //        if (AktifKasa.BelgeAskiyaAlabilir)
        //        {
        //            switch (AktifKasiyer.BelgeBekletme)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //        {
        //            return Durum.Onaysiz;
        //        }

        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum MiktarliSatisIslemi
        //{
        //    get
        //    {
        //        switch (AktifKasiyer.MiktarliSatis)
        //        {
        //            case 1:
        //                return Durum.Onayli;
        //            case 2:
        //                return Durum.Onaysiz;
        //            case 3:
        //                return Durum.SifreOnayli;
        //            default:
        //                return Durum.Onayli;
        //        }
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public Durum CekmeceAcmaIslemi
        //{
        //    get
        //    {
        //        switch (AktifKasiyer.ParaKasasiAcma)
        //        {
        //            case 1:
        //                return Durum.Onayli;
        //            case 2:
        //                return Durum.Onaysiz;
        //            case 3:
        //                return Durum.SifreOnayli;
        //            default:
        //                return Durum.Onayli;
        //        }
        //    }
        //}

        ///// <summary>
        ///// Yapıldı
        ///// </summary>
        //public SaticiDurum SaticiSecimIslemi
        //{
        //    get
        //    {
        //        switch (AktifKasa.SaticiGirisi)
        //        {
        //            case 0:
        //                return SaticiDurum.Girilebilir;
        //            case 1:
        //                return SaticiDurum.Girilemez;
        //            case 2:
        //                return SaticiDurum.GirisiZorunlu;
        //            default:
        //                return SaticiDurum.Girilebilir;
        //        }
        //    }
        //}

        //public Durum UrunTekrarIslemi
        //{
        //    get
        //    {
        //        switch (AktifKasiyer.UrunTekrar)
        //        {
        //            case 1:
        //                return Durum.Onayli;
        //            case 2:
        //                return Durum.Onaysiz;
        //            case 3:
        //                return Durum.SifreOnayli;
        //            default:
        //                return Durum.Onayli;
        //        }
        //    }
        //}
        //public Durum OdemeIptalIslemi
        //{
        //    get
        //    {
        //        switch (AktifKasiyer.OdemeIptali)
        //        {
        //            case 1:
        //                return Durum.Onayli;
        //            case 2:
        //                return Durum.Onaysiz;
        //            case 3:
        //                return Durum.SifreOnayli;
        //            default:
        //                return Durum.Onayli;
        //        }
        //    }
        //}
        //public Durum ElleFiyatGirisIslemi
        //{
        //    get
        //    {
        //        if (AktifKasa.FiyatGirisiYapabilir)
        //        {
        //            switch (AktifKasiyer.ElleFiyatGirisi)
        //            {
        //                case 1:
        //                    return Durum.Onayli;
        //                case 2:
        //                    return Durum.Onaysiz;
        //                case 3:
        //                    return Durum.SifreOnayli;
        //                default:
        //                    return Durum.Onayli;
        //            }
        //        }
        //        else
        //        {
        //            return Durum.Onaysiz;
        //        }
        //    }
        //}

    }
}
